Other places...
Assemply lessons
Lesson 1
Lesson 2
Lesson 3
Lesson 4
Lesson 5
Lesson 6
Lesson 7
Lesson 8
Lesson 9


Tools
Html Tester V 1.0
Code Encoder New

Vbcode
Under construction

Games
X & O الإصداره العربيه
X & O English Edition

Links
الفريق العربى
الموسوعه العربيه
شبكة فارس العامه
المطورون العرب
فجوال بيسك للعرب
الخبر كافيه
المهندس
www.vbzoom.com
Free vb codes
Linux for arabs
Free compilers
3alam el-computer
A good IT gate
www.ahliz.org


Mix
الدعاء
Site Packages
News(arabic)
My whispers
Site poles
About mrezzuz
Send feed-back

Ezzuz web site
الدرس التاسع 9 /6/2003
    مقدمه

السلام عليكم ثانيةً ... تابعنا سوياً الدروس السابقه فى لغتنا المحببه الأسمبلى وتعرفنا على ماهى اللغه و خواصها و قدرتها ... تمام .!؟
وتعرفنا على كيفية التحكم فى سير البرامج و كيفية وضع الشروط و إختبار القيم . كما تعرفنا أيضاً على الدورات و أنواعها و تقنياتها .
وتعرفنا على كيفية التعامل مع السلاسل النصيه و مع البيانات المسترسله وكيفية إستخدامها مع بعض الأمثله البسيطه لتوضيح عملها .
سنتابع الدرس السابق (مواضيع متقدمه نسبياً ) فى الأسمبلى . هذه المره سنتعلم إنشاء أكثر من جزء Procedures وكيفية نقل البرنامج إليها و الرجوع منها وسيكون فى نهاية الدرس برنامج مفتوح المصدر Open Source Code يحتوى على معظم ما درسناه من تقنيات و طرق . فهيا نبدأ,


(2)    التعامل مع الإجراءات Procedures :-

  • ما هى الإجراءات Procedures ؟

    الإجراءات هى مجموعه من سطور الكود و الأوامر البرمجيه و الجمل البرمجيه تكون أجزاء فى داخل البرنامج نفسه أو خارج البرنامج وتعمل كبرنامج صغير لها متغيراتها الخاصه و لها مدخلاتها ومخرجاتها الخاصه و أهم شىء : لها عملها الخاص التى تبنى من أجله .

  • مميزات الإجراءات :-

    • الإجراءات من أكثر إمكانيات اللغات البرمجيه تأثيراً فى نظام البرنامج و قوتها إستقرارها .

    • توفر الكود و الوقت على المبرمج نفسه و تعطى له إحساس بقيمة ما يفعل .

    • وهى بدورها تساعد فى إنتشار البرامج و خصوصاً الكبيره و الضخمه منها و تبادل أجزاءها بين أكثر من شخص أو مبرمج .

    • يتم بناء البرامج والتطبيقات الكبرى عليها .

    • تساعد فى سرعة تصحيح الأخطاء Error Handling .

    • أساس عمل البرمجه الكائنيه (Object Orianted Programming (OOP

  • كيفية عمل الإجراءات ...؟

    يتم عمل نداء للإجراء المراد الوصول إليه عن طريق [CALL Procedure_name] من داخل الإخراء الرئيسى Main Procedure أو من أى إجراء آخر . هذا بعد تجهيز مدخلات الإجراء إذا كان يعمل على مدخلات . فيتم أنتقال العمل إلى الإجراء الفرعى (لأنه يتفرع من إجراء آخر ) . وبعد إنتهاء عمله بالأمر [RET] يرجع الإجراء ثانياً إلى الجمله البرمجيه التى تلى الأمر [CALL] فى اإجراء الذى قام بالنداء أولاً .

    خذ إنتباهك من الأتى :-

    الإجراء الرئيسى Main procedure :-

    هو الإجراء الذى يتم بدأ البرنامج به , بمعنى أنه أول إجراء يعمل مع بدأ البرنامج بالعمل . و ينتهى البرنامج بإنتهاء هذا الإجراء كما هو معتاد .
    يتم وضع إسم الإجراء الرئيسى بجانب أمر الإنتهاء END فى أسفل البرنامج.

  • كيفية إنشاء الإجراءات ...؟

    • يتم إنشاء إجراء جديد عن طريق كتابة أسم الإجراء الجديد يليه كتابة الأمر PROC.

    • أكتب بالداخل جمل الإجراء أياً كانت على حسب إختيارك و على حسب عمل الإجراء .

    • ينتهى الإجراء بكتابة أسم الأجراء يليه الأمر RET.

  • ملاحظات على الإجراءات :-

    • لا يمكن كتابة إجراء داخل أجراء آخر . وإلا فلن يعمل صحيحاً وسوف يعطى المترجم Assembler رسالة خطأ Error . لذلك فأنه يجب كتابة الإجراء الجديد أما بعد إنتهاء إجراء أو قبل بدأ إجراء .

    • لا يجب أن يكون الإجراء فى نفس البرنامج و لكن يمكن إضافته إلى البرنامج و هو يكون داخل ملف آخر فى الهارد أو فى الذاكره مثل إجراءات النظام التى نعمل لها نداء عن طريق INT وهى فى هذه الحاله يطلق عليها Software Interrupts . ولكن الأخرى التى فى ملف آخر تسمى Macros or Modules . ومن الممكن أن تكون فى حالتها المصدريه أو فى حالتها القابله للتشغيل مثل (Dynamic link liberaries (DLL'S .

إلى هنا ينتهى حديثنا عن الإجراءات . وسنستعرض برنامجاً كاملاً مفتوح المصدر يحتوى على إجراءات عده . فهيا بنا



هذا البرنامج يقوم بالأتى :-

  1. يقوم بطلب البيانات المطلوب تشفيرها من المستخدم .

  2. يقوم بعمل أختبار لها , للتأكد من صحة البيانات .

  3. يشفر البيانات عن طريق عمل XOR لكل حرف على حده من هذه البيانات.

  4. يقوم بعرض البيانات فى صورتها المشفره .

  5. ويقوم بعرض البيانات نفسها ثانيأً .
كما إستنتجتم فأن البرنامج يقوم بعمل تشفير لبيانات من المستخدم ويعرض له البيانات مشفره .

البرنامج



;------------------------------------------------------------
;App_name : DECODER.EXE
;Author : mrezzuz
;web site : http://www.1t.2t.3t.4t.com
;Date : 20/4/2003
;------------------------------------------------------------
Title decoder
.MODEL small
.STACK 100H

.DATA

    LF EQU 0AH
   CR EQU 0DH
   MSG DB 1000H DUP (0)  ;Encode up to 4 kbytes 
   HR db LF,CR,'----------------------------------------------$'
   CODE_MSG db 'The code : $'
   MSG_MSG db 'The message : $'
   WELCOM DB CR,LF,'Type in a new message for working:',CR,LF,'$'
   AGAIN DB CR,LF,'Play again ',1h,' ?[Y For agree]',LF,CR,'$'
   CODE_VAL DB 9BH

.CODE
   MAIN PROC 
   MOV AX,@DATA
   MOV DS,AX
   ;---------------------------------

START:
    XOR AX,AX
    XOR BX,BX
    XOR CX,CX
    XOR DX,DX
    LEA DX,HR
    MOV AH,9
    INT 21H
    LEA DX,WELCOM    ;print the welcom message
    INT 21H
;start to read the user input
    LEA BX,MSG     

READ_BYTE : 
    MOV AH,1       ;input one char
    INT 21H
    CMP AL,CR     ;compare end of user inputs
    JE END_READ
    CMP AL,08H   ;compare backspace
    JE BACK
    MOV [BX],AL  ;store input char into msg 
    INC CX           ;increment counter
    INC BX           ;increment offset
    JMP READ_BYTE

BACK:
    MOV DL,32    ;Print space and backspace to clear the backed char.
    MOV AH,2
    INT 21H
    MOV DL,8
    INT 21H
    DEC CX           ;if backspace then dec counter and offset
    DEC BX
    JMP READ_BYTE

END_READ:
;Not operate until user input at least one char or 
;Until cx > 00h  and else ask for again
    CMP CX,00H    
    JLE ask_again
    CALL DEC_INC        ;calls xor function  TO ENCODE.
    MOV AH,2 ;print new line 
    MOV DL,LF
    INT 21H 
    MOV DL,CR
    INT 21H
    LEA   DX,CODE_MSG
    MOV AH,9
    INT 21H
    CALL PRINT_MSG   ;calls msg printting which was stored in msg 
    CALL DEC_INC        ;call xor TO DECODE .
    LEA DX,MSG_MSG
    MOV AH,9
    INT 21H
    CALL PRINT_MSG

ask_again:
   LEA DX,AGAIN   
   MOV AH,9
   INT 21H
   MOV AH,1   ;scan what's user replay . if Y or y then again else exit
   INT 21H
   CMP AL,'Y'
   JE START
   CMP AL,'y'
   JE START

END_MAIN:   ;Exit to dos
    MOV AH,4CH
    INT 21H

    MAIN ENDP
;___________________________________________________________________
PRINT_MSG PROC
;The procedure prints the bytes sequancly from the msg address CX times.
;CX must > 00h 
;The procedure uses BX as an offset
    PUSH CX   ;store CX
    MOV AH,2 ;print new line 
    MOV DL,LF
    INT 21H 
    MOV DL,CR
    INT 21H
    LEA BX,MSG
START1:
    MOV DL,[BX]   ;start print first char of msg address
    INC BX   ;icrement the offset
    INT 21H
    LOOP START1
    MOV AH,2 ;print new line 
    MOV DL,LF
    INT 21H 
    MOV DL,CR
    INT 21H
    POP CX   ;return CX
    RET
PRINT_MSG ENDP
;____________________________________________________________________   
DEC_INC PROC
;The procedure XOR the byte from address msg CX times .
;CX must > 00H
;The procedure uses BX as an offset
   PUSH CX
   LEA BX,MSG
START2:
   MOV AH,CODE_VAL   ;moves the code value into AH
   XOR [BX],AH   ;XOR with offset BX
   INC BX
   LOOP START2
   POP CX
   RET  ;return
DEC_INC ENDP
   END MAIN   ;start the program control from MAIN procedure

              

من الممكن تحميل البرنامج فى حالته المصدريه من هنا .
من الممكن تحميل البرنامج فى حالته التشغيليه من هنا .



إلى هنا ينتهى درس الأسمبلى التاسع . حيث تعرفنا على ما هى الإجراءات و كيفية بناءها و طرق عملها .فى المره القادمه سيكون هناك أختبار بسيط لكى أرى مدى إستيعابكم لما درستموه هنا فى قسم الأسمبلى إن شاء الله . أرجو من الله أن يكون درس اليوم سهلاً و بسيطاً و أن يكون قدم شيئاً مفبداً و جديداً لأخواننا الأعزاء.
ولا تنسونى من الدعاء يا أخوانى .
والسلام عليكم و رحمة الله و بركاته



Send feed-back to webmaster@1t.2t.3t.4t.com
Copy rights reserved to Ezzuz web site
22 / 3 / 2003
<<<Aseemply 8                         Assemply 9                         Test 1>>>